Memory fixes for Magellan.
authorrobertlipe@gmail.com <robertlipe@gmail.com@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 2 Jan 2014 00:09:29 +0000 (00:09 +0000)
committerrobertlipe@gmail.com <robertlipe@gmail.com@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 2 Jan 2014 00:09:29 +0000 (00:09 +0000)
git-svn-id: http://gpsbabel.googlecode.com/svn/trunk@4703 f51c46e8-681c-474f-0cfe-069cfd0219fb

gpsbabel/gpx.cc
gpsbabel/magellan.h
gpsbabel/maggeo.cc
gpsbabel/magproto.cc
gpsbabel/stmsdf.cc

index b3aeacf0d884ae162af3d7528eaff370cfedeaad..5b554fd8bc9e22c7f99e7ef85d124f5013b7a0c4 100644 (file)
@@ -938,14 +938,7 @@ gpx_end(const QString& el)
     wpt_tmp = NULL;
     break;
   case tt_cache_name:
-#if NEW_STRINGS 
     wpt_tmp->notes = cdatastr;
-#else
-    if (wpt_tmp->notes != NULL) {
-      xfree(wpt_tmp->notes);
-    }
-    wpt_tmp->notes = xstrdup(cdatastr);
-#endif
     break;
   case tt_cache_container:
     waypt_alloc_gc_data(wpt_tmp)->container = gs_mkcont(cdatastr);
@@ -1126,14 +1119,7 @@ gpx_end(const QString& el)
   case tt_wpt_desc:
   case tt_trk_trkseg_trkpt_desc:
   case tt_rte_rtept_desc:
-#if NEW_STRINGS 
     wpt_tmp->notes = cdatastr;
-#else
-    if (wpt_tmp->notes != NULL) {
-      xfree(wpt_tmp->notes);
-    }
-    wpt_tmp->notes = xstrdup(cdatastr);
-#endif
     break;
   case tt_pdop:
     wpt_tmp->pdop = cdatastr.toDouble();
index fbc47aa6aca3a6156e4e2359adf71d2fd27a4f16..cfa740660edee73d131e6cf6ab1cd54a191e24ef 100644 (file)
@@ -48,7 +48,7 @@ QString mag_find_descr_from_token(const char* token);
 QString mag_find_token_from_descr(const QString& icon);
 
 unsigned int mag_checksum(const char* const buf);
-char* m330_cleanse(const char* istring);
+QString m330_cleanse(const char* istring);
 
 waypoint* mag_trkparse(char* trkmsg);
 void mag_rteparse(char* rtemsg);
index db3ee579cf6f453b0bc92d55412536e062e0457d..0093b76f61e56a605e19016959e7f5049659ecf8 100644 (file)
@@ -224,11 +224,12 @@ append(char* buf, const char* str)
   /* Actually, this function needs needs refactored... */
   cleansed2 = xstrdup(cleansed1);
 #else
-  cleansed2 = m330_cleanse(cleansed1);
+  cleansed2 = xstrdup(m330_cleanse(cleansed1));
 #endif
 
   strcat(buf, cleansed2);
 
+
   xfree(cleansed1);
   xfree(cleansed2);
 
index 77fafb623eccb3c16ec237492d6d00cf873e9c9c..a2e9d4f5209e6d191fc5c6044b4d1879985799b3 100644 (file)
@@ -112,7 +112,7 @@ static route_head* trk_head;
 static int ignore_unable;
 
 static waypoint* mag_wptparse(char*);
-typedef char* (cleanse_fn)(const char*);
+typedef QString (cleanse_fn)(const char*);
 static cleanse_fn* mag_cleanse;
 static const char** os_get_magellan_mountpoints();
 
@@ -223,7 +223,7 @@ static icon_mapping_t* icon_mapping = map330_icon_table;
  *   that's valid for a waypoint name or comment.   The string should be
  *   freed when you're done with it.
  */
-static char*
+static QString
 m315_cleanse(const char* istring)
 {
   char* rstring = (char*) xmalloc(strlen(istring)+1);
@@ -237,13 +237,15 @@ m315_cleanse(const char* istring)
     }
   }
   *o = 0;
-  return rstring;
+  QString rv(rstring);
+  xfree(rstring);
+  return rv;
 }
 
 /*
  * Do same for 330, Meridian, and SportTrak.
  */
-char*
+QString
 m330_cleanse(const char* istring)
 {
   static char m330_valid_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ "
@@ -259,7 +261,9 @@ m330_cleanse(const char* istring)
     }
   }
   *o = 0;
-  return rstring;
+  QString rv(rstring);
+  xfree(rstring);
+  return rv;
 }
 
 /*
@@ -522,7 +526,6 @@ retry:
       trk_head = route_head_alloc();
 
       /* Whack trailing extension if present. */
-#if NEW_STRINGS
       QString s = get_filename(curfname);
       int idx = s.indexOf('.');
       if (idx > 0) {
@@ -530,15 +533,6 @@ retry:
       }
         
       trk_head->rte_name = s;
-#else
-      char* e;
-      const char* s = get_filename(curfname);
-      trk_head->rte_name = xstrdup(s);
-      e = strrchr(trk_head->rte_name, '.');
-      if (e) {
-        *e = '\0';
-      }
-#endif
       track_add_head(trk_head);
     }
 
@@ -1118,7 +1112,7 @@ mag_rteparse(char* rtemsg)
     if (broken_sportrak && abuf[0]) {
       rte_elem = (mag_rte_elem*) xcalloc(sizeof(*rte_elem),1);
       QUEUE_INIT(&rte_elem->Q);
-      rte_elem->wpt_name = xstrdup(abuf);
+      rte_elem->wpt_name = (abuf);
 
       ENQUEUE_TAIL(&mag_rte_head->Q, &rte_elem->Q);
     }
@@ -1138,7 +1132,7 @@ mag_rteparse(char* rtemsg)
     rte_head = route_head_alloc();
     route_add_head(rte_head);
     rte_head->rte_num = rtenum;
-    rte_head->rte_name = xstrdup(rte_name);
+    rte_head->rte_name = rte_name;
 
     /*
      * It is quite feasible that we have 200 waypoints,
index 4404516b4a6f3bcaf157b3f568cb2109b6e52ade..b4a577fdbfa5f19190480cd5f5824ea082db8d3f 100644 (file)
@@ -268,7 +268,7 @@ parse_point(char* line)
       break;
 
     case 1:
-      wpt->shortname = csv_stringclean(str, "\"");
+      wpt->shortname = csv_stringclean(str, QString("\""));
       if ((what == 2) || (what == 3)) {
         column += 2;  /* doesn't have date and time */
       }